package com.xuecheng.server.controller;

import com.xuecheng.server.domain.Message;
import com.xuecheng.server.service.MessageRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/api/messages")
public class MessageController {

    private final String IMAGE_DIR = "D:/Box/images";  // 图片存储路径
    private final String TXT_DIR = "D:/Box/txt";  // txt文本存储路径

    private static final Logger logger = LoggerFactory.getLogger(MessageController.class);  // 添加日志记录器

    @Autowired
    private MessageRepository messageRepository;

    // 修改上传方法，使用 @RequestPart("file") 来接收文件
    @PostMapping("/upload")
    public ResponseEntity<String> uploadMessage(
            @RequestParam("content") String content,
            @RequestPart(value = "file", required = false) MultipartFile file,
            @RequestPart(value = "txtFile", required = false) MultipartFile txtFile) {  // 增加接收txt文本的参数

        String imagePath = null;
        if (file != null && !file.isEmpty()) {
            try {
                File dir = new File(IMAGE_DIR);
                if (!dir.exists()) dir.mkdirs();  // 确保目录存在

                // 获取文件的原始名称
                String filename = file.getOriginalFilename();

                // 确保文件名不会导致路径问题
                if (filename != null) {
                    filename = filename.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");  // 去除文件名中非法字符
                }
                File storedFile = new File(IMAGE_DIR + File.separator + filename);  // 使用 File.separator 来保证跨平台兼容性
                file.transferTo(storedFile);  // 将图片保存到本地
                imagePath = storedFile.getAbsolutePath();  // 获取图片路径
            } catch (IOException e) {
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("图片上传失败");
            }
        }

        String txtPath = null;
        if (txtFile != null && !txtFile.isEmpty()) {
            try {
                File dir = new File(TXT_DIR);
                if (!dir.exists()) dir.mkdirs();  // 确保目录存在

                // 获取文件的原始名称
                String txtFilename = txtFile.getOriginalFilename();

                // 确保文件名不会导致路径问题
                if (txtFilename != null) {
                    txtFilename = txtFilename.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");  // 去除文件名中非法字符
                }
                File storedTxtFile = new File(TXT_DIR + File.separator + txtFilename);  // 使用 File.separator 来保证跨平台兼容性
                txtFile.transferTo(storedTxtFile);  // 将txt文本保存到本地
                txtPath = storedTxtFile.getAbsolutePath();  // 获取txt文本路径
            } catch (IOException e) {
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("txt文本上传失败");
            }
        }

        // 将上传的文字、图片路径和txt文本路径保存到数据库
        Message message = new Message();
        message.setContent(content);
        message.setImagePath(imagePath);
        message.setTxtPath(txtPath);  // 假设Message类中新增了setTxtPath方法来保存txt文本路径
        messageRepository.save(message);  // 保存到数据库

        // 打印日志
        logger.info("上传内容: {}", content);
        logger.info("图片存储路径: {}", imagePath);
        logger.info("txt文本存储路径: {}", txtPath);

        return ResponseEntity.ok("上传成功");
    }
}